<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

<script>
// mutation / immutable 

// 数组的实例方法 从是否会 改变 变量本身的值，分为两类：
  // 1. 改变变量本身的值：mutation/mutate
    // push/pop/shift/unshift/splice / reverse
  // 2. 不改变变量本身的值：immutation / immutable
    // slice / concat / join

// 数组的 实例方法
var arr = [1, 3, 5, 6, 'xxxx', true];

// splice(start, ?deleteCount)
  // 该实例方法，改变 变量本身的值
  // 1. 从 start（包含 start），开始删除，删除的个数为 deleteCount
  // 2. 若 没 deleteCount参数，即从 从 start（包含 start）直接删除后续 所有 item
  // 3. 若有 >=3 个删除，即 从 start（包含 start），开始删除，删除的个数为 deleteCount，
      // 在删除的位置，增加  >=3 的 items
      // var result = arr.splice(1, 2, 'a', 'b', 'c');
      // console.log(result, arr); 

// slice ->  切片， 
  // 该实例方法，不改变 变量本身的值
  // 1. arr.slice(start)： 返回 [start, 最终] 这个区间的 数组 元素
  // 2. arr.slice(start, end)： 返回 [start, end) 这个区间的 数组 元素
  // var result = arr.slice(2, 4);
  // console.log(result, arr);


// reverse ->  将数组 所有元素，倒序排序，返回值为 结果值；同时改变 变量本身的值；
  // 该实例方法，改变 变量本身的值
  // var result = arr.reverse();
  // console.log(result, arr);

// concat  ->  作用：将 arr 和 其实参 拼接到一个 数组中
  // 如果 实参是 一维数组，会将数组”解包“
  // 该实例方法，不改变 变量本身的值
  // var result = arr.concat(['iii', 'yyy'], 'ooo', 'III');
  // console.log(result, arr);

// join -> 作用：以 分隔符separator 为连接符，将数组的每个元素 连接成 字符串
  // 该实例方法，不改变 变量本身的值
var result = arr.join();
console.log(result, arr);
</script>